えっ? ElasticSearchってAWSのサービスじゃなかったんですか!?|アドカレ2013 : CFn #10
あけりです。 『アドベントカレンダー2013:AWS CloudFormationビッグバンテンプレート』の10日目のエントリーになります。今日はElasticSearchをElasticに構築するためのテンプレートです。昨日は渡辺さんのAWSで継続的インテグレーション 〜 Jenkins編でした。
ElasticSearchとは?
ElasticSesarchとはオープンソースの全文検索エンジンです。似たようなものにApache Solrがありますが、最近は設定の簡単さや、スケーラビリティからElasticSearchの人気が高まってきているようです。 (噂によるとElasticSearchがなければCloudSearchはElasticSearchという名前だったのではないかと言われています)
オススメする構成
そうとうリッチな構成です。 ELBがあります。 こいつはport 80で受け付けて配下のElasticSearchのサーバ群に9200でつなぎに行きます。 さらにAutoScalingも贅沢に2段階で構成します。 まずはCPU使用率によるScalingをするAutoScalingGroup 次にDiskの使用率によるScalingをするAutoScalingGroupです。 Diskの使用率はCloudWatchでは取得出来ないので、CustomMetricsで対応します。
公開テンプレート
スタックパラメータ
VpcId | EC2を起動するVPCのID(本番用テンプレートのみ) |
---|---|
SubnetIds | ElasticSearchのEC2を起動するサブネットのID(本番用テンプレートのみ) |
AvailabilityZones | SubnetIdsで指定したSubnetが存在するAvailabilityZone(本番用テンプレートのみ) |
maxClusterSize | クラスタの最大サイズ |
ElasticSearchAWSPluginVersion | ElasticSearchのAWS Pluginのバージョン |
SSHLocation | SSHが接続可能なネットワーク(CIDR指定) |
ElasticSearchClientLocation | ElasticSearch(Port9200)に接続可能なネットワーク(CIDR指定) |
minClusterSize | 最小クラスタサイズ |
ElasticSearchVersion/th> | ElasticSearchのバージョン |
KeyName | KeyPairの名前 |
InstanceType | インスタンスタイプ t1.microではメモリが確保できません言われて起動できません。m1.small以上でやりましょう。 |
インストールされる設定ファイルなど
/usr/local/elasticsearch-${version}にElasticSearchの本体がインストールされます。 /usr/local/elasticsearchにシンボリックリンクがはられます。 /usr/local/bin/diskcheckというスクリプトがインストールされます。このスクリプトは現在のディスク使用量をCloudWatchのカスタムメトリクスに送信するためのスクリプトです。 rootのcronに上記/usr/local/bin/diskcheckを毎分実行する設定がされます。
注意点
本番用は、既存のVPC上に展開しますが、既存のVPC内のインスタンスから外にアクセス出来る必要があります。
クラスタのDiscoverのためにIAMRoleを利用するので、create stackの時にIAMいじっていいですよ的なオプションを付けて実行してください。
Demo版のAZがもしかしたら、人によっては使えないAZの可能性も有ります。 その場合、テンプレートをダウンロード後、primary、secondaryを自分が使えるAZに変更して使ってください。
まとめ
AWS CloudFormationビッグバンテンプレート、10日目はElasticSearchでした。 自動的にスケーリングしたり、何だったりと管理するものがめんどくさいものはこうやってCloudFormationでさくっと立ち上げてしまうのが楽ちんで良いですね。 運用部分も含めてCloudFormationで記述することで、別の案件で使いまわす時もあっという間に同じ構成を立ち上げる事が出来るのもありがたいです。